import { sys } from "cc";
import { losTools } from "../Tools/losTools";
import { losChannelWeb } from "./losChannelWeb";
import loskc from "./loskc";
import { losChannel } from "./losChannel";


export class losChannelHw1 extends losChannelWeb {

    channel: string = 'hw';
    static OAID: string = null;

    paraMap: Map<String, string> = new Map([
        ['appId', '113524787'],

        // ['customInsertAd', 'u7m3hc4gvm'],//测试
        // ['bannerAd', 'j1pcnpx5tu'],//测试
        // ['videoAd', 'u2k89ub7vq'],//测试

        ['customInsertAd', 'w35jd36919'],//正式
        ['bannerAd', 'b5jr6imejl'],//正式
        ['videoAd', 'h4rgzi9emk'],//正式

        ['ctrlId', '67e4eedac8946b1700d9604d'], //策略开头id
    ]);

    channelObj: any = (window as any).qg;


    ruanzhu: string = `著作权人:南京桔柚檬网络科技有限公司\n软著登记号:2019SR1134381`;
    name: string = '对号入球';
    company: string = '南京桔柚檬网络科技有限公司';

    protected privacyPageTxtCount = 780;
    privacyStr: Array<string> = [`更新日期:<b>2021年12月12日</b>生效日期:<b>2021年12月12日</b>

<b>${this.company}（以下简称“我们”）</b>非常重视您的个人信息及隐私安全。我们制定本“隐私政策”希望您在向我们提供某些信息（其中很可能包括您的个人信息）以及允许我们处理并分享某些信息之前，能够清晰地了解这些信息收集的目的、可能的用途以及其他方面的内容。本隐私政策可能会不时更新。建议您定期查阅本隐私政策，以了解任何相关变更。

产品名称:

<b>《${this.name}》</b>

<color=#009EFF>在此温馨提示您仔细阅读并理解本隐私政策。如果您有任何隐私方面的疑问，请使用以下联系方式:</color>

电子邮件:<b>lpx@gamejym.com</b>

公司地址:南京市建邺区嘉陵江东街18号1栋

请您知悉，本政策仅适用于我们向您提供服务所收集的信息，不适用于通过接入我们产品或服务的第三方所收集的信息。

<color=#009EFF>请您仔细阅读并充分理解相关内容：</color>

为向您提供服务，我们将依据本隐私政策收集、使用、存储必要的信息。
基于您的明示授权，我们可能会申请开启您的设备权限，您有权拒绝或取消授权。
您可以访问、更正、删除您的个人信息，还可以撤回授权同意、注销账号、投诉举报以及调整其他隐私设置。
我们已采取符合业界标准的安全防护措施保护您的个人信息。
如您是未成年人，请您和您的监护人仔细阅读本隐私政策，并在征得您的监护人授权同意的前提下使用我们的服务或向我们提供个人信息。
<color=#009EFF>设备权限调用情况</color>

在您使用我们产品的过程中，我们需要在必要范围内向您申请获取设备权限。请您知悉，我们不会默认开启您设备的权限，仅在您主动确认开启的情况下，才有可能通过设备权限收集您的信息。调用的权限、调用权限的目的，以及调用权限前向您询问的情况如下：

<b>设备权限</b>	<b>调用权限的目的</b>	<b>是否询问</b>	<b>用户可否关闭权限</b>
<b>联网能力及获取联网状态和Wi-Fi状态，以及网络相关信息,如:IP地址、WLAN接入点(如SSID、BSSID等)	连接网络	是	可</b>
<b>读取电话状态,获取设备标识信息,mac地址	识别用户，更好地保障用户数据服务	是	可</b>
<b>读取和写入外部存储	下载并保存内容	是	可</b>
<b>震动	用于提示用户或提供游戏体验	是	可</b>
<b>其他权限	接入渠道SDK需要，详见下方	是	可</b>
如您在首次授权开启权限后希望关闭权限，您可以在设备的设置功能中选择关闭权限，从而拒绝我们收集相应的个人信息。

<color=#009EFF>1. 如何收集和使用个人信息</color>

我们会按照如下方式收集您在使用服务时主动提供的，以及通过自动化手段收集您在使用功能或接受服务过程中产生的信息：

<color=#009EFF>1.1 注册、登录</color>

当您注册时我们会收集您的昵称、头像、手机号码、邮箱等，收集这些信息是为了帮助您完成注册保护您的帐号安全。手机号码属于敏感信息，收集此类信息是为了满足相关法律法规的网络实名制要求。若您不提供这类信息，您可能无法正常使用我们的服务。
您也可以使用微信、邮箱或者各平台ID登录并使用，您将授权我们获取您在第三方平台注册的公开信息（头像、昵称以及您授权的其他信息），使您可以直接登录并使用本产品和相关服务。
<color=#009EFF>1.2 认证</color>

在您使用身份认证的功能或服务时，根据相关法律法规，您可能需要提供您的真实身份信息：真实姓名、身份证号码、电话号码以完成实名验证。这些信息属于个人敏感信息，您可以拒绝提供，但您将可能无法获得相关服务。

<color=#009EFF>1.3 信息发布</color>

您发布内容时，我们将收集您发布的信息，并展示您的昵称、头像、发布内容。

<color=#009EFF>1.4 安全运行</color>

<color=#009EFF>1.4.1 安全保障功能</color>

我们致力于为您提供安全、可信的产品与使用环境，提供优质而可靠的服务是我们的核心目标。为实现安全保障功能所收集的信息是必要信息。

<color=#009EFF>1.4.2 日志信息</color>

为了保障软件与服务的安全运行，我们会收集您的操作、使用、服务日志。

<color=#009EFF>1.5 收集、使用个人信息目的变更</color>

原则上，当新功能或服务与我们当前提供的功能或服务相关时，收集与使用的个人信息将与原处理目的具有直接或合理关联。在与原处理目的无直接或合理关联的场景下，我们收集、使用您的个人信息，会再次进行告知，并征得您的同意。

<color=#009EFF>1.6 依法豁免征得同意收集和使用的个人信息</color>

请您理解，在下列情形中，根据法律法规及相关国家标准，我们收集和使用您的个人信息无需征得您的授权同意：

与国家安全、国防安全直接相关的；
与公共安全、公共卫生、重大公共利益直接相关的；
与犯罪侦查、起诉、审判和判决执行等直接相关的；
出于维护个人信息主体或其他个人的生命、财产等重大合法权益但又很难得到本人同意的；
所收集的您的个人信息是您自行向社会公众公开的；
从合法公开披露的信息中收集的您的个人信息的，如合法的新闻报道、政府信息公开等渠道；
根据您的要求签订或履行合同所必需的；
用于维护软件及相关服务的安全稳定运行所必需的，例如发现、处置软件及相关服务的故障；
为合法的新闻报道所必需的；
学术研究机构基于公共利益开展统计或学术研究所必要，且对外提供学术研究或描述的结果时，对结果中所包含的个人信息进行去标识化处理的；
法律法规规定的其他情形。
<color=#009EFF>2. 对Cookie和同类技术的使用</color>

我们可能会设置认证与保障安全性的Cookie或匿名标识符，以确认您是否安全登录服务，在确认您已正常登录的情况下才会向您提供服务，从而避免账号盗用、信息泄露等情况发生。
使用Cookie可以帮助您省去重复填写个人信息、输入搜索内容的步骤和流程。
您可以在浏览器“设置”功能中进行Cookie数据清除。如您进行清除，您可能无法使用我们提供的依赖于Cookie的相关服务和功能，但不影响其他功能与服务的正常使用。
<color=#009EFF>3. 我们如何共享、转让、公开披露个人信息</color>

<color=#009EFF>3.1 共享</color>

我们不会共享您的个人信息给任何其他第三方，除非征得您的明确同意。

<color=#009EFF>3.2 转让</color>

我们不会转让您的个人信息给任何其他第三方，除非征得您的明确同意。
随着我们业务的持续发展，我们将有可能进行合并、收购、资产转让，您的个人信息有可能因此而被转移。在发生前述变更时，我们将按照法律法规及不低于本隐私政策所载明的安全标准要求继受方保护您的个人信息，否则我们将要求继受方重新征得您的授权同意。

<color=#009EFF>3.3 披露</color>

我们不会公开披露您的信息，除非遵循国家法律法规规定或者获得您的同意。我们公开披露您的个人信息会采用符合行业内标准的安全保护措施。
对违规帐号、欺诈行为进行处罚公告时，我们会披露相关帐号的信息。
“寻人”、“追逃”等公益项目，经根据符合法律法规的规定和明确授权后，我们会公开披露与事件相关的信息。当事件结束后，我们将及时删除已披露的个人敏感信息。
<color=#009EFF>3.4 依法豁免征得同意共享、转让、公开披露的个人信息</color>

请您理解，在下列情形中，根据法律法规及国家标准，我们共享、转让、公开披露您的个人信息无需征得您的授权同意：

与国家安全、国防安全直接相关的；
与公共安全、公共卫生、重大公共利益直接相关的；
与犯罪侦查、起诉、审判和判决执行等直接相关的；
出于维护您或其他个人的生命、财产等重大合法权益但又很难得到本人同意的；
您自行向社会公众公开的个人信息；
从合法公开披露的信息中收集个人信息的，如合法的新闻报道、政府信息公开等渠道。
<b>4. 我们如何存储个人信息</b>

<color=#009EFF>4.1 存储地点</color>

我们会按照法律法规规定，将境内收集的用户个人信息存储于中国境内。

<color=#009EFF>4.2 存储期限</color>

我们仅在提供服务期间保留您的个人信息；您发布的内容在您未删除或注销帐号期间会予以保留。超出必要期限后，您的个人信息会被删除或匿名化处理，但法律法规另有规定的除外。

<color=#009EFF>5. 我们如何保护个人信息的安全</color>

我们努力为用户的信息和隐私安全提供包保障，防止信息的丢失、不当使用、未经授权访问或披露。
我们会以业界成熟的安全标准收集、使用、存储和传输用户信息：例如在进行网络传输时会对个人信息进行加密存储（SSL、md5等）。存在于Cookie里的个人安全认证信息也会被进行加密和混淆处理。
我们会建立专门的安全部门、安全管理制度和数据安全流程来保障您的个人信息安全。采取严格的数据访问和使用制度，确保只有授权人员才能访问您的个人信息，并适时对数据和技术进行安全审计。
我们会制定应急处理预案，并在发生用户信息安全事件时立即启动应急预案，努力阻止安全事件的影响扩大。一旦发生用户信息安全事件（泄露、丢失），我们将按照法律法规的要求及时向您告知。
<color=#009EFF>6. 管理您的个人信息</color>

我们非常重视您对个人信息的管理，并尽全力保护您对于您个人信息的查询、访问、修改、删除、撤回同意授权、注销帐号、投诉举报以及设置隐私功能的相关权利，以使您有能力保障您的隐私和信息安全。

<color=#009EFF>6.1 访问、删除、更正您的个人信息</color>

<color=#009EFF>6.1.1 访问、修改个人帐号信息</color>

您可以查询、访问您的头像、用户名、简介，并且可以在我们产品的“帐号中心”中修改您的头像、简介。
<color=#009EFF>6.1.2 删除发布的内容</color>
删除发布内容：进入我们产品“内容管理”—点击文章右侧“操作”下的“下线”按钮。
特别提示您注意，出于安全性和身份识别（如号码申诉服务）的考虑，您可能无法自主修改注册时提交的某些初始注册信息。如您确有需要修改该类注册信息，请根据本隐私政策载明的联系方式联系我们。
<color=#009EFF>6.2 注销帐号</color>
您可以通过发送请求注销帐号的邮件至<b>lpx@gamejym.com</b>申请注销帐号。在您注销帐号前，我们将验证您的个人身份、安全状态、设备信息等。注销帐号的行为是不可逆的行为，当您注销帐号后，我们将删除您的相关信息或将您的信息进行匿名化处理，但法律法规另有规定的除外。
<color=#009EFF>6.3 投诉举报</color>
如果您认为您的个人信息权利可能受到侵害，或者发现侵害个人信息权利的线索，请通过以下邮箱地址<b>lpx@gamejym.com</b>联系我们。我们核查后会及时处理您的投诉举报。
<color=#009EFF>6.4 访问隐私政策</color>
您可以在产品注册,登录,设置,关于等界面查看本隐私政策的全部内容。

<color=#009EFF>6.5 停止运营向您告知</color>

如我们停止运营，我们将及时停止收集您个人信息的活动，将停止运营的通知以公告的形式通知您，并对所持有的您的个人信息进行删除或匿名化处理。

<color=#009EFF>7. 未成年人条款</color>

我们产品主要面向成年人。若您是未满18周岁的未成年人，在使用本产品及相关服务前，应在您的父母或其他监护人监护、指导下共同阅读并同意本隐私政策。
如您的监护人不同意您按照本政策使用我们的服务或向我们提供信息，请您立即终止使用我们的服务并及时通知我们，以便我们采取相应的措施。
若您是未成年人的监护人，当您对您所监护的未成年人的个人信息有相关疑问时，请通过本隐私政策公示的联系方式与我们联系。
<color=#009EFF>8. 隐私政策的修订和通知</color>

我们会适时对本隐私政策进行修订，如该等变更会导致您在本政策项下权利的实质减损，我们会在变更生效前在页面显著位置通知您。
若您不同意该等变更可以停止使用我们的产品，若您继续使用我们的产品或服务，即表示您同意受修订后的本隐私政策的约束。`
        ,
    `更新日期: 2021年12月12日 生效日期: 2021年12月12日
            
欢迎您使用由${this.company} 提供的服务。

本《用户服务协议》（以下称“本协议”）是用户（以下称“您”）接受${this.company}（以下简称为“本公司”）所提供的服务所使用的法律服务条款。 本公司在此特别提醒您认真阅读本协议的全部条款，特别是其中免除或者限制本公司责任的免责声明条款以及用户须遵守的条款和其它限制用户权利的条款，这些条款应在中国法律所允许的范围内最大程度地适用。除非用户 接受本协议的全部条款，否则无权安装运行客户端软件或以其它方式使用本公司提供的任何服务内容。

当您在线点击“同意”或“接受”后，则视为您已详细阅读并同意本协议的全部内容，并同意遵守本协议的规定。

如果您未满18周岁，请在法定监护人的陪同下阅读本协议。

一、特别提示

本公司同意按照本协议的规定及其不时发布的操作规则提供基于互联网的相关 服务(以下称“网络服务”)，为获得网络服务，您同意本协议的全部条款并按照页面上的提示完成全部程序。您在进行程序过程中点击“同意”按钮即表示用户完全接受本协议项下的全部条款。这些条款可由本公司随时更新，协议条款一旦发生变动，本公司将会在相关的页面上提示变更内容。修改后的协议一旦在页面上公布即有效代替原来的协议。您在使用本公司提供的软件产品之前，应仔细阅读本协议，如不同意本服务协议及或随时对其的修改，请停止使用本公司提供的服务内容。
特别申明，未成年人应在法定监护人的陪同下审阅和接受本协议。未成年人在使用本公司的服务前，应事先取得父母（监护人）的同意。若父母（监护人）希望未成年人（尤其是十岁以下子女）得以使用本服务，必须以法定监护人身份加以判断本服务是否符合于未成年人。未成年人用户应当在合理程度内使用本公司提供的服务内容，不得因使用本公司提供的服务内容而影响了日常的学习生活。用户理解本公司无义务对本款前述事项进行任何形式的审查和确认。
二、权属声明

本公司发布的所有软件均受中华人民共和国版权法保护，用户可以免费下载并使用，但未经本公司许可，用户不得修改本公司游戏的客户端程序；不得制作、传播或使用扰 乱正常游戏秩序或有损本公司利益的任何第三方软件。
本公司游戏服务的经营权属于本公司所有，除非与本公司另签协议，用户同意本服务仅供个人且仅于本服务平台范围内非商业性质的使用。用户同时承诺不经本公司书面同意，不得利用本服务进行广告、销售、商业展示等商业性用途。
用户发表于本公司游戏及配套网站的所有内容仅代表用户自己的立场和观点，与本公司无关，由用户本人承担一切法律责任。
三、用户隐私制度

本公司绝对不会修改用户的个人资料，或编辑或透露用户在注册资料中的密码、姓名、地址、电话、身份证号码及保存在本公司中的非公开内容，除非有法律许可要求或本公司在诚信的基础上认为透露这些信息在以下四种情况是必要的：

遵守有关法律规定，遵从合法服务程序。
维护本公司的商标所有权。
在紧急情况下竭力维护用户个人和社会大众的隐私安全。
符合其他相关的要求。
四、游戏数据的特别规定

本公司严禁以下行为：

发布违法信息、严重违背社会公德、以及其他违反法律禁止性规定的行为；
利用游戏作弊工具或者外挂、游戏BUG获取非法利益，严重侵犯本公司利益的行为；
论坛、游戏中传播非法讯息、木马病毒、外挂软件等的行为；
因游戏中举办的活动结束，相关道具被删除或兑换，用户不得提出索赔等要求，本公司对于活动有最终的解释权。
五、服务的停止和更改

发生下列情形之一时，本公司有权停止或中断向用户提供的服务：
用户有发布违法信息、严重违背社会公德、以及其他违反法律禁止性规定的行为；
发布不道德信息、广告、言论、辱骂骚扰他人，扰乱正常的网络秩序和游戏秩序的行为，以及实施违反本协议和相关规定、管理办法、公告、重要提示，对本公司和其他用户利益造成损害的其他行为；
由于相关政府机构的要求。
在本服务条款约定的情形下，本公司就停止或更改或终止向用户所提供的服务而可能产生的不便或损害，本公司对用户本人或任何第三人均不负任何损害赔偿责任。
本公司有权仅根据其判断，单方决定新增、修改、删除、暂停或终止其所提供的全部或部分服务（包括且不限于增加、暂停或终止某个游戏的运营），且无需另行个别通知用户，用户不得因此要求任何补偿或赔偿。
本公司对其服务不保证不出现任何程序BUG，并对由此可能产生的问题不承担任何赔偿责任。
六、服务条款的修改

本公司保留随时修改本服务条款的权利，修改本服务条款时，本公司将于相关网站公告修改的事实，而不另对用户进行个别通知。若用户不同意修改的内容，可停止使用本公司的服务。若用户继续使用本公司的服务，即视为用户已接受本公司所修订的内容。

七、法律适用和争议解决

本协议的订立、执行和解释及争议的解决均应适用中国法律。
本协议构成双方对本协议之约定事项及其他有关事宜的完整协议，除本协议规定的之外，未赋予本协议各方其他权利。
如本协议中的任何条款无论因何种原因完全或部分无效或不具有执行力，本协议的其余条款仍应有效并且有约束力。
本协议中的标题仅为方便而设，不具法律或契约效果。
如双方就本协议内容或其执行发生任何争议，双方应尽量友好协商解决；协商不成时，任何一方均可向本公司所在地的人民法院提起诉讼。
在适用法律允许的最大范围内，本公司保留对本协议的最终解释权。用户如对本协议有任何疑问，请联系lpx@gamejym.com。`];

    /* 是否同意了隐私政策 */
    hasPrivacy(): boolean {
        return !!loskc.getData('isAgree', 0);
    }

    /** getSystemInfoSync */
    getSysInfo(): any {
        if (sys.isBrowser) {
            return {};
        }
        if (!this.sysInfo) {
            this.sysInfo = this.channelObj.getSystemInfoSync();
        }
        return this.sysInfo;
    }

    exit(): void {
        this.channelObj.exitApplication({
            success: function () {
                console.log("exitApplication success");
            },
            fail: function () {
                console.log("exitApplication fail");
            },
            complete: function () {
                console.log("exitApplication complete");
            }
        });
    }

    init(loginCall: (code?: number) => void) {



    }

    qgLogin(callback: (e: any) => void = (e) => { if (e) { console.error(e); } }) {
        callback && callback('success');
    }
    login({ successCall, failCall }: { successCall: () => void, failCall: (code: number) => void }): void {
        if (sys.isBrowser) {
            successCall && successCall();
            loskc.log('浏览器，模拟登录成功！');
            return;
        }
        console.log("Sign-in");
        const appid = this.getPara('appId');
        console.log("appid:", appid);

        this.channelObj.gameLoginWithReal({
            forceLogin: 1,
            appid: appid,
            success: (data) => {
                // 登录成功后，可以存储账号信息。             
                console.log(" game login with real success:" + JSON.stringify(data));
                successCall && successCall();
            },
            fail: (data, code) => {
                console.log("game login with real fail:" + data + ", code:" + code);
                //根据状态码处理游戏的逻辑。
                //状态码为7004或者2012，表示玩家取消登录。
                //此时，建议返回游戏界面，可以让玩家重新进行登录操作。
                if (code == 7004 || code == 2012) {
                    console.log("玩家取消登录，返回游戏界面让玩家重新登录。")
                    failCall && failCall(code);
                }
                //状态码为7021表示玩家取消实名认证。
                //在中国大陆的情况下，此时需要禁止玩家进入游戏。
                else if (code == 7021) {
                    console.log("The player has canceled identity verification. Forbid the player from entering the game.")
                    failCall && failCall(code);
                }
                else {
                    console.log("其他错误，返回游戏界面让玩家重新登录。")
                    failCall && failCall(code);
                }
            }
        });
    }
    private _isInOnHideVideo: boolean = true;
    private _isPlayingVideo: boolean = false;
    showVideo(paras: { sucCall: any; failCall: any; endCall: any; posName?: string; adsid?: string }): void {
        if (sys.isBrowser) {
            loskc.log('浏览器，开始模拟播放视频广告！')
            setTimeout(() => {
                paras.sucCall();
                paras.endCall();
                loskc.log('3秒后，模拟视频广告播放成功');
            }, 1);
            return;
        }
        const id = this.getPara('videoAd');
        if (!id) {
            return;
        }
        if (this._isPlayingVideo)
            return;
        loskc.log('showVideo', id);
        this._isPlayingVideo = true;
        this.rewardedVideoAd = this.channelObj.createRewardedVideoAd({
            adUnitId: id
        });
        this.rewardedVideoAd.offLoad();
        this.rewardedVideoAd.offError();
        this.rewardedVideoAd.offClose();

        this.videoFns['onLoad'] = () => {
            loskc.log('激励视频 广告加载成功');
            this.rewardedVideoAd.show();
        };
        this.videoFns['onError'] = (err) => {
            this._isPlayingVideo = false;
            loskc.err("激励视频 error", JSON.stringify(err));
            paras.failCall();
            paras.endCall();
            this.channelObj.showToast({
                message: '暂无广告'
            });
        }
        this.videoFns['onClose'] = (res) => {
            this._isPlayingVideo = false;
            loskc.log('激励视频 广告关闭', res);
            this.sendReportActive((res && res.isEnded) ? 1 : 0);
            if (res && res.isEnded) {
                // 正常播放结束，可以下发游戏奖励
                paras.sucCall();
                loskc.eventReport('广告完成-' + paras.posName);
            }
            else {
                paras.failCall();
            }
            paras.endCall();
        }
        this.rewardedVideoAd.onLoad(this.videoFns['onLoad']);
        this.rewardedVideoAd.onError(this.videoFns['onError']);
        this.rewardedVideoAd.onClose(this.videoFns['onClose']);
        this.rewardedVideoAd.load();
    }
    private createBannerFunc() {
        if (this.residentBannerAd != null) {
            this.residentBannerAd.destroy();
            this.residentBannerAd = null;
        }
        const id = this.getPara('bannerAd');
        if (!id) {
            return;
        }
        //获取手机详细参数
        var sysInfo = this.channelObj.getSystemInfoSync();
        console.log("on getSystemInfoSync: success =" + JSON.stringify(sysInfo));
        //获取当前手机屏幕高度(dp)
        var bannerTop = sysInfo.safeArea.height
        this.residentBannerAd = this.channelObj.createBannerAd({
            adUnitId: id,
            // adIntervals: 45, // 自动刷新频率不能小于30秒
            style: {
                //top需要手机屏幕高度减去广告本身高度
                top: bannerTop - 57,
                left: 0,
                height: 57,
                width: 360,
            }
        });
        if (this.residentBannerAd) {
            loskc.log('创建常驻banner成功')
            loskc.log(JSON.stringify(this.residentBannerAd));
            this.residentBannerAd.onClose(() => {
                setTimeout(() => {
                    this.closeResidentBanner();
                    this.createBannerFunc();
                }, 35 * 1000);
            })
            this.residentBannerAd.show();
        }
    }
    showResidentBanner() {
        if (sys.isBrowser) {
            loskc.log('浏览器，模拟banner展示成功！')
            return;
        }
        const p2 = this.getCtrl('p9');
        loskc.log("p9 游戏内常驻banner是否展示： " + p2)
        if (!loskc.chance(p2 / 100))
            return;
        this.createBannerFunc();
    }
    closeResidentBanner(): void {
        if (this.residentBannerAd) {
            this.residentBannerAd.hide();
            this.residentBannerAd.destroy()
        }
    }

    showBanner(isForce?: boolean, styleFn?: any, where?: string): void {
        if (sys.isBrowser) {
            loskc.log('浏览器，模拟banner展示成功！')
            return;
        }
        const id = this.getPara('bannerAd');
        if (!id) {
            return;
        }
        const p1 = this.getCtrl('p1');
        loskc.log("p1 ==> 控制banner是否展示，值0为不展示，1为展示 ： " + p1)
        if (!p1 && !isForce) {
            loskc.log('广告策略p1不展示banner');
            return;
        }
        loskc.log('showBanner', id);
        this.bannerAd = this.channelObj.createBannerAd({
            posId: id,
            adIntervals: 30, // 自动刷新频率不能小于30秒
            // style: {
            //     left: 0,
            //     // top: windowHeight - 300,
            // },
        });
        this.bannerAd.onError(err => {
            loskc.log('banner广告加载失败' + JSON.stringify(err));
        });

        this.bannerAd.show().then(() => {
            loskc.log('banner广告展示完成');
        }).catch((err) => {
            loskc.log('banner广告展示失败' + JSON.stringify(err));
        });
    }

    closeBanner(): void {
        if (this.bannerAd) {
            this.bannerAd.hide();
            this.bannerAd.destroy()
        }
    }


    private bannerTimeId = -1;
    showBannerByTime(isForce: boolean = false) {
        let t = 30;
        const p4 = this.getCtrl('p4');
        if (p4 < 1) {
            loskc.log('banner不展示');
            return;
        }
        if (this.bannerTimeId >= 0) {
            clearInterval(this.bannerTimeId);
        }
        this.closeBanner();
        if (t < 30) {
            t = 30;
        }
        this.showBanner(isForce, null, 'battle');
        this.bannerTimeId = setInterval(() => {
            this.showBanner(isForce, null, 'battle');
        }, t * 1000);
    }

    closeBannerByTime() {
        if (this.bannerTimeId >= 0) {
            clearInterval(this.bannerTimeId);
        }
        this.closeBanner();
    }

    /** 上一次custom展示时间 */
    private lastCustomShowTime: number = 0;
    /** customAd展示时间间隔，单位毫秒 */
    private customGapSec: number = 5000;

    private customAdMap = {};

    private nativeAd = null;

    reportAdShow(adId: string) {
        this?.nativeAd?.reportAdShow({
            adId: adId
        })
    }
    reportAdClick(adId: string) {
        this?.nativeAd?.reportAdClick({
            adId: adId,
        })
    }
    private _nextShowInterTime = 0;
    showCustomAd(isForce?: boolean, style?: any, showVideoOnClose: boolean = false): void {
        const cd = this.getCtrl('p23');
        console.log('插屏展示CD:' + cd);
        if (sys.isBrowser) {
            if (Date.now() < this._nextShowInterTime) {
                console.log("当前时间： " + new Date(Date.now()).toLocaleString());
                console.log("下次展示时间： " + new Date(this._nextShowInterTime).toLocaleString());
                console.log("距离下次展示时间不足，不展示插屏");
                return;
            }
            this._nextShowInterTime = Date.now() + cd * 1000;
            loskc.log('浏览器，模拟插屏展示成功！')
            console.log("下次展示时间已更新： " + new Date(this._nextShowInterTime).toLocaleString());
            return;
        }
        const id = this.getPara('customInsertAd');
        if (!id) {
            return;
        }
        console.log("当前时间： " + new Date(Date.now()).toLocaleString());
        console.log("下次展示时间： " + new Date(this._nextShowInterTime).toLocaleString());
        if (Date.now() < this._nextShowInterTime) {
            console.log("距离下次展示时间不足，不展示插屏");
            return;
        }
        const p3 = this.getCtrl('p3');
        console.log("ad demo : loadNativeAd");
        this.nativeAd = this.channelObj.createNativeAd({
            adUnitId: id,
            success: (code) => {
                console.log("createNativeAd success");
            },
            fail: (data, code) => {
                console.log("createNativeAd fail: " + data + "," + code);
            },
            complete: () => {
                console.log("createNativeAd complete");
            }
        });
        this.nativeAd.offLoad();
        this.nativeAd.onLoad((test) => {
            this.nativeAd.offLoad();
            this._nextShowInterTime = Date.now() + cd * 1000;
            console.log("下次展示时间已更新： " + new Date(this._nextShowInterTime).toLocaleString());
            console.log("loadNativeAd onLoad enter");
            const adid = test.adList[0].adId;
            const picUri = test.adList[0].imgUrlList[0];
            const title = test.adList[0].title;
            const source = test.adList[0].source;
            const clickBtnTxt = test.adList[0].clickBtnTxt;
            setTimeout(() => {
                losTools.showHwNativeAD(adid, picUri, title, source, clickBtnTxt);
            }, p3 * 1000);
        });
        this.nativeAd.offError();
        this.nativeAd.onError((test) => {
            console.log("ad demo : loadNativeAd onError enter" + test.errCode);
            console.log("ad demo : loadNativeAd onError enter" + test.errMsg);
        });
        this.nativeAd.load();
    }

    closeCustomAd(isBanner?: boolean): void {
        const id = (isBanner) ? this.getPara('customBannerAd') : this.getPara('customInsertAd');
        if (!id) {
            return;
        }
        if (this.customAdMap[id]) {
            this.customAdMap[id].hide();
        }
    }
    needShowPrivacy(): boolean {
        return true
    }
    canSupportAddShortcut(): boolean {
        return false
    }
    canSupportSideBar(): boolean {
        return false
    }
    /** 是否支持分享 */
    canShare(): boolean {
        return false;
    }
    /** 普通插屏map */
    private insertMap = {};
    loadMultiInter() {
        // this.loadMultiInsert(['59f0457414a4456699e98109258ca657', 'edf85f49b1054b8998639174b691f73e'])
    }
    /** 普通插屏广告，如果需要同时弹多个，需要分开创建（即load），然后在同一帧一起调show展示,这里返回insertAd对象用于展示时同时展示 */
    private loadInsert(id: string) {
        console.log('====>loadInsert', id);
        const interstitialAd = this.channelObj.createInterstitialAd({
            posId: id
        });
        interstitialAd.onLoad(() => {
            console.log('插屏加载成功', id, interstitialAd);
        });
        interstitialAd.onError(err => {
            console.log("插屏广告加载失败", err);
        });

        // interstitialAd.show().then(() => {
        //     console.log('插屏广告展示完成');
        // }).catch((err) => {
        //     console.log('插屏广告展示失败', JSON.stringify(err));
        // });
        this.insertMap[id] = interstitialAd;
        return interstitialAd;
    }

    /** 同时load多个普通插屏，注意需要提前加载，算好时间 */
    loadMultiInsert(idArr: string[]) {
        let sleep = 800;
        for (let i = 0; i < idArr.length; i++) {
            const id = idArr[i];
            setTimeout(() => {
                this.loadInsert(id);
            }, sleep * i);
        }
    }

    /** 同时显示多个普通插屏,需要提前loadMultiInsert之后再调，这里必须同时调show，否则会报错 */
    showMultiInter(num: number, style?: any) {
        for (const id in this.insertMap) {
            const insertAd = this.insertMap[id];
            if (!insertAd) {
                continue;
            }
            insertAd.show().then(() => {
                console.log('showMultiInsert展示完成');
            }).catch((err) => {
                console.log('showMultiInsert展示失败', JSON.stringify(err));
            });
        }
    }

    /** 关闭所有普通插屏 */
    closeAllInsert() {
        for (const id in this.insertMap) {
            const insertAd = this.insertMap[id];
            if (!insertAd) {
                continue;
            }
            insertAd.destroy();
        }
    }

    private timeOutId = 0;
    //定义变量，跳过递归
    private isSkip = false;
    private p20Act(min: number, max: number) {
        if (this.isSkip) {
            return;
        }
        const t = losTools.getRandomInt(min, max);
        this.timeOutId = setTimeout(() => {
            this.showCustomAd();
            loskc.log(`华为，挑战模式间隔${t}秒弹插屏！`);
            this.p20Act(min, max);
        }, t * 1000)
    }
    private _isStartInterAdTime = false;
    private _isDelayShowVideo = false;
    doAction(type: number, channelNames: string[], stateCallFunc?: (enabled: boolean, val: number) => void) {
        let canExe = false;
        if (channelNames) {
            channelNames.forEach(channelName => {
                if (channelName == this.channel) {
                    canExe = true;
                }
            })
        }

        if (!canExe)
            return;
        let getVal = 'p' + type
        let _switch = this.getCtrl(getVal);
        loskc.log("☆☆☆☆☆☆☆ 调用doAction，策略：" + type)
        switch (type) {
            case 12:
                {
                    if (_switch) {
                        loskc.chance(_switch / 100) && this.showVideo({ sucCall: () => { }, failCall: () => { }, endCall: () => { } });
                    }
                }
                break
            case 20:
                {
                    const p21 = this.getCtrl('p21');
                    if (loskc.chance(p21 / 100)) {
                        this.isSkip = false;
                        this.p20Act(_switch, _switch + 5);
                    }
                }
                break;
            case 25:
                {
                    if (_switch > 0) {
                        loskc.log(`进入首页开始，强弹插屏，开关为秒数，如设30，就是每隔30秒弹一次插屏，每${_switch}秒弹插屏`);
                        if (!this._isStartInterAdTime) {
                            this._isStartInterAdTime = true;
                            setInterval(() => {
                                this.showCustomAd();
                            }, _switch * 1000)
                        }
                    }
                }
                break;
            case 26:
                {
                    if (_switch > 0) {
                        const count = this.getCtrl('p27');
                        let delay = loskc.randomInt(_switch, _switch + 10)
                        loskc.log(`游戏打开开始（加载完成开始算）强弹视频广告（仅一次），开关为时间，并且是加5秒的范围，如设为5，范围就是 5 -10，0为不弹，${delay}秒后，弹激励视频，弹出次数为${count}次`);
                        if (!this._isDelayShowVideo) {
                            this._isDelayShowVideo = true;
                            setTimeout(async () => {
                                for (let index = 0; index < count; index++) {
                                    await losChannel.instance().showVideo({
                                        sucCall: () => { },
                                        failCall: () => { },
                                        endCall: () => { }
                                    }
                                    );
                                }
                            }, delay * 1000);
                        }
                    }
                }
                break;
            case -1:
                {
                    console.log('清除一些数据');
                    this.isSkip = true;
                    clearTimeout(this.timeOutId);
                }
                break;
            default:
                {

                    loskc.log("当前开关：" + getVal + ", 当前值：" + _switch)
                    stateCallFunc && stateCallFunc(_switch != 0, _switch)
                }
                break;
        }
    }
    getVideoShowDelay(): number {
        return this.getCtrl('p24');
    }
    getOAId() {
        if (sys.isBrowser)
            return;
        losChannelHw1.OAID = loskc.getData('oaid', null);
        if (!losChannelHw1.OAID) {
            //获取设备oaid
            if (window["qg"].getOAID) {
                window["qg"].getOAID({
                    success: (ret) => {
                        let oaid = ret["oaid"];
                        loskc.log("qg.getOAID success :" + JSON.stringify(ret));
                        loskc.log("======oaid oaid oaid: ====", oaid);
                        losChannelHw1.OAID = oaid;
                        loskc.saveData('oaid', losChannelHw1.OAID);
                    },
                    fail: (errMsg, errCode) => {
                        loskc.log("qg.getOAID fail " + errCode + ': ' + errMsg)
                    },
                    complete: () => {
                        loskc.log("qg.getOAID complete")
                    }
                })
            }
            else {
                loskc.log('没有getOAID方法');
            }
        }
    }

    sendReportActive(isEnd: number) {
        if (!losChannelHw1.OAID) {
            loskc.log('没有OAID，不发送关键行为');
            return;
        }
        const reqData = { 'oaid': losChannelHw1.OAID, 'p': '1670315546048035968', 'isEnd': isEnd };
        loskc.jpost('https://ga.gamejym.com/fcm/adTrack/hw_addiction', reqData, (err, re) => {
            if (err) {
                loskc.err(err);
                return;
            }
            loskc.log('关键行为返回', JSON.stringify(re));
        });
    }
}
